#include "device.h"
#include "general.h"
#include "ps2_remote_control.h"
#include "color.h"
#include "grayscale.h"
#include "chassic.h"


extern u8 flag;

/***************************************数据定义区***************************************/
TIM_HandleTypeDef TIM9_Handler;                             //TIM9初始化句柄

/*************************定时器9初始化 1ms产生一次溢出中断*******************/
void TIM9_Init(void)
{
  TIM9_Handler.Instance = TIM9;
  TIM9_Handler.Init.Prescaler = 84 - 1;                         //分频系数84
  TIM9_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;         //向上计数模式
  TIM9_Handler.Init.Period = 1000 - 1;                          //重装载值1000
  TIM9_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  HAL_TIM_Base_Init(&TIM9_Handler);                           //定时器初始化
  HAL_TIM_Base_Start_IT(&TIM9_Handler);                       //开启定时器3
}

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
  __HAL_RCC_TIM9_CLK_ENABLE();                                //定时器9使能
  HAL_NVIC_SetPriority(TIM1_BRK_TIM9_IRQn, 0, 0);               //设置中断优先级，抢占 0，子优先级 0
  HAL_NVIC_EnableIRQ(TIM1_BRK_TIM9_IRQn);                     //开启定时器9中断
}

void TIM1_BRK_TIM9_IRQHandler(void)
{
  HAL_TIM_IRQHandler(&TIM9_Handler);                          //定时器共用处理函数
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)   //定时器溢出中断回调函数
{
  static int TimTicks = 0;                                      //定时器9溢出中断计数，1ms产生一次，用来确定时间
  if (htim == &TIM9_Handler)                                     //判断溢出中断是否为定时器9产生
  {
    
    /* 50ms 执行一次 */
    TimTicks++;
    if (TimTicks % 50 == 0)
    {
      TimTicks = 0;
      ps2_data_refresh();
      if (ps2_is_red_mode())  /* 使用遥控器控制 flag=1 */
      {
        chassis_control();
//        flag = 1;
      }
      
      else
      {
        get_sensor_value(); //获得灰度数据
        track(forward_l, forward_r);
//        flag = 0;
      }
    }
  }
}

